package Template_Method_Pattern;

/**
 * 抽象方法, 定义模板方法和基本方法
 * 模板方法定义做菜的流程步骤
 * 基本方法定义每个步骤的处理方法
 */
public abstract class abstractClass {
    // 模板方法 不能被重写
    public final void cookProcess(){
        pourOil();
        heatOil();
        pourVegetable();
        if (!addSpicy()){
            System.out.println("不加辣,加调料");
            pourSauce();
        }
        fry();
    }
    // 基本方法
    // 具体方法: 倒油 热油 翻炒
    public void pourOil(){
        System.out.println("倒油");
    }

    public void heatOil(){
        System.out.println("热油");
    }

    public void fry(){
        System.out.println("翻炒");
    }

    // 抽象方法: 倒蔬菜和加调料
    public abstract void pourVegetable();

    public abstract void pourSauce();

    // 钩子方法
    public boolean addSpicy(){
        return false;
    }
}
